package com.kelvem.saas.workbanch.security.shiro;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class TenantService {
    // 使用 ConcurrentHashMap 来存储租户信息
    private static final Map<String, TenantInfo> tenantCache = new ConcurrentHashMap<>();

    // 获取租户信息的静态方法，支持并发访问
    public static TenantInfo getTenantInfo(String tenantId) {
        // 先尝试从缓存中获取租户信息
        TenantInfo cachedTenant = tenantCache.get(tenantId);
        if (cachedTenant != null) {
            return cachedTenant;
        }

        // 如果缓存中没有，加锁进行数据库查询和更新操作
        synchronized (tenantCache) {
            // 双重检查，避免多个线程同时从数据库加载同一个租户信息
            cachedTenant = tenantCache.get(tenantId);
            if (cachedTenant == null) {
                // 从数据库获取租户信息（模拟）
                TenantInfo tenantInfo = fetchTenantInfoFromDatabase(tenantId);
                // 将获取到的租户信息放入缓存
                tenantCache.put(tenantId, tenantInfo);
                return tenantInfo;
            } else {
                return cachedTenant;
            }
        }
    }

    // 模拟从数据库获取租户信息的方法
    private static TenantInfo fetchTenantInfoFromDatabase(String tenantId) {
        // 实际应用中，这里可以是从数据库查询的逻辑
        // 这里简单地返回一个示例租户信息
        return new TenantInfo(tenantId, "Tenant " + tenantId);
    }
}

